//
//  SSHomeViewModel.swift
//  SSSina
//
//  Created by ss on 2017/7/4.
//  Copyright © 2017年 ss. All rights reserved.
//

import UIKit
import SDWebImage

/*
 - 帮助首页请求数据保存数据 和提供数据
 */

class SSHomeViewModel: NSObject {
    
    //保存首页的模型数组
    lazy var dataList:[SSStatusViewModel] = [SSStatusViewModel]()
    
}
extension SSHomeViewModel{
    func getHomeData(isPullUp: Bool, finish:@escaping (Bool, Int)->()){
        
        // since_id 为下拉刷新服务
        // max_id 为上拉加载更多服务
        var sinceId:Int64 = 0
        var maxId:Int64 = 0
        // 判断如果是下拉刷新
        if !isPullUp {
            sinceId = dataList.first?.homeModel?.id ?? 0
        }else{
            // 上拉加载更多
            maxId = dataList.last?.homeModel?.id ?? 0
            // 若指定此参数，则返回ID小于或等于max_id的微博，默认为0。
            if maxId > 0 {
                maxId -= 1
            }
        }
        
        SSNetworkTools.share.homeLoadData(since_id: sinceId, max_id: maxId, success: { (response) in
            
            //            print("请求成功",response)
            // 判断它是否为nil 而且是否是一个字典
            guard let resDict = response as? [String: Any] else{
                finish(false, 0)
                return
            }
            //            print(resDict)
            // 判断resDict["statuses"] 是否为nil 而且是否是一个[[string:any]]
            guard let resList = resDict["statuses"] as? [[String: Any]] else{
                finish(false, 0)
                return
            }
            // 使用yymodel
            let tempList = NSArray.yy_modelArray(with: SSHomeModel.self, json: resList)
            
            // 判断是否为nil 而且是否是一个有模型的数组
            guard let t = tempList as? [SSHomeModel] else{
                finish(false, 0)
                return
            }
            
            // 创建一个临时的数组 ->HMStatusViewModel
            var tempStatusList:[SSStatusViewModel] = [SSStatusViewModel]()
            
            // 创建调度组
            let group = DispatchGroup()
            
            // 遍历保存模型的数组 t
            for homeModel in t {
                // 下载单张图片
                // 如果是原创微博 且 count == 1
                if homeModel.pic_urls?.count == 1{
                    /*
                     - 下载后的图片
                     - 图片二进制
                     - 错误信息
                     - 缓存类型
                     - 是否完成
                     - 图片地址
                     */
                    group.enter()
                    SDWebImageManager.shared().loadImage(with: URL(string: homeModel.pic_urls?.first?.thumbnail_pic ?? ""), options: [], progress: nil, completed: { (_, _, _, _, _, _) in
                        print("原创微博图片下载完成")
                        group.leave()
                    })
                }
                
                // 如果是转发微博 且 count == 1
                if homeModel.retweeted_status?.pic_urls?.count == 1 {
                    group.enter()
                    SDWebImageManager.shared().loadImage(with: URL(string: homeModel.retweeted_status?.pic_urls?.first?.thumbnail_pic ?? ""), options: [], progress: nil, completed: { (_, _, _, _, _, _) in
                        print("转发微博图片下载完成")
                        group.leave()
                    })
                }
                // 创建一个viewModel
                let statusViewModel = SSStatusViewModel()
                // 赋值
                statusViewModel.homeModel = homeModel
                // 保存
                tempStatusList.append(statusViewModel)
            }
            // 下拉刷新
            if !isPullUp{
                self.dataList = tempStatusList + self.dataList
                
            }else{
                // 上拉加载更多
                self.dataList =  self.dataList + tempStatusList
            }
            
            // 使用调度组来监听单张图片是否下载完成
            group.notify(queue: DispatchQueue.main, execute: {
                print("所有单张图片下载完成")
                // 执行成功
                finish(true, tempStatusList.count)
            })
            
        }) { (error) in
            print("请求失败",error)
            finish(false, 0)
        }
    }
}
